perm filename SC3A.FOR[ZZZ,LCS] blob
sn#439867 filedate 1979-05-08 generic text, type T, neo UTF8
C ********** SC3A.F4 ******* SEE RUN.CMD, SCORE.CMD --
C AND, IF DESIRED, A SUBROUTINE WITH THE FOLLOWING HEADING:
C SUBROUTINE SUBR
C COMMON /P/P(1) /PL/IPL(1) /INS/ RINST(27),BG(60)
C COMMON INUM,IPAR /KNT/KNT(27),BT,IREST,DF /DUR/DUR(27)
C INUM=INST# IPAR=PARAM#
C BT=BASIC TIME P1 WHEN SUBROUTINE IS CALLED
C IF IREST IS <0, THAT NOTE WILL BE A REST.
C RINST=INST. NAME, BG=INSTS' BEGIN TIMES.
C NOTE #S IN SUBROUTINE: (1-108) C4=49 FS4=55 B4=60 C5=61 ETC.
C F0=200 F99=299 (LIMIT IS F0-F99!) 'R'(REST)=199
SUBROUTINE RUNIT
INTEGER PL,PL4,COPYL
COMMON /PCIP/ PCH(27,33) /IPT/IPT(27,32) /JPREC/JPREC
C 2ND NUM IN IPT=NUMP+2. (NUMPY)
C PL SHOULD HAVE ABOUT NUMP+17
COMMON/P/P(30)/PL/PL(47)/NUMP/NUMP,NUMPX,NUMPY /IRX/IR1,IR2
1 /COPY/COPY(30) /COPYL/COPYL(30),IT(30)
COMMON /DEVS/ID1,ID21,JTYPE,ID23,ID20
COMMON /Q/BNW(200),NWZ/INS/RINST(27),BG(60)/TYP/JOUT,LN,KTYPE
1 /ROFF/ROFF(27),RDEV(27),P1(27)
1 /VV/LIMIT,V(1) /A/NP(27),XT(27),FRM(80),INVIS(27)
1 /COFF/RREST(27),RNP(27)
C JPT MUST BE .LE.27*NUMPY !!
DIMENSION JPT(837),NCNT(27,32)
C WITH VX AT 70 AND FRM AT 80 OK FOR ONLY
C 40 LIT CHARS + 30 PARAMS PER INST.
C 60 BG TIMES AVAILABLE. FOR INSTS AND INSERTS AND EDITS.
COMMON J,L /DUR/DUR(27) /KNT/KNT(27),BT,IREST,DF
1/E/IQ(27),KL,X,ZPAR,KA,LK,NNUM,JJ,JA,ISUB,NFLG
1 ,VX(70),IAMP,K,KN,M,ML,SPACE
COMMON/B/MOT,PR,T5,NINS,I,RA,KZY,NWX,INONLY,MX,
1 Y,Z,FNAME,MZ,N,IDALL,JC,JG,RB,IJ,IX,BW,NL,RC,W,
1 ZZ,CHN,YY
1 /D/TF,AMPFAC,OP1,DURX,IXIN,FLNM
1 /INTC/NWZZ,IT3,NW,KODE,NPAR,LP,NPA,IBX,IZ,IA
1 /REALC/T,T1,BY,T6,T2,RD,TDUR,T4,AC
1 /BLA/IBLA,KSLA,ISEMI,MINUS,ISTAR,ICOMM,ICOL,IQUES,ILESS,IQT
C JPT MUST BE .LE.27*NUMPY !!
EQUIVALENCE (PP1,P(1)),(P(2),P2),(P(3),P3),(P(4),P4),
1 (VX1,VX(1)),(IPT,JPT)
1 ,(VX2,VX(2)),(VX3,VX(3)),(NCNT,PCH),(VX4,VX(4))
DATA IR1/0/,IR2/0/,RNDOFF/1000.0/,IBLA/' '/,PLAY/'PLAY'/,
1 ISEMI/';'/
IF(JPREC.GE.0)GO TO 9350
C NOW FOUND 'PRECEDE' MATERIAL TO TYPE OR WRITE ON DSK.
9351 READ(ID21,END=9350)K,(XT(J),J=1,K)
CCCC IF(MZ.LT.0)WRITE(JOUT,9352)(XT(J),J=1,K)
IF(MX.LT.0)WRITE(ID20,9353)(XT(J),J=1,K)
GO TO 9351
9352 FORMAT(1X20A4)
C11 ******* USE 20A4 IN FORMAT STATEMENT
9353 FORMAT(20A4)
9350 ITOT=1
SPACE=0
C FOR SPACE BETWEEN NOTES IN PRINTOUT
NUMPX=NUMP+1
NUMPY=NUMP+2
PR=0
DO 9337 K=1,27
KNT(K)=0
RDEV(K)=0
IPT(K,1)=0
9337 RREST(K)=0
C ZEROS NAME CHANGE, CUTOFF AND RAND REST STORAGE
2337 T=0
DO 1107 K=1,NUMP
1107 PL(K)=1
C 2/74--WAS AT 17300/1 SETS DEFAULT OUTPUT MODE TO 1.
WRITE(JOUT,902)
C WRITES A BLANK LINE (IF 'SOS' WAS HERE)
NWZZ=0
RAMP=0
IT3=0
K=1
IX=0
BG(NINS+1)=19999.
4337 IF(V(I-1).EQ.-9900.-BY)I=I-1
V(I)=-19899.
PP1=0
T6=10000.
DO 2118 K=1,NINS
ROFF(K)=0
C********* FEB 17,71
M=NP(K)
IT(K)=0
IPT(K,NUMPX)=0
NCNT(K,NUMPX)=1
DO 2118 L=1,M
NCNT(K,L)=1
2118 IPT(K,L)=0
DO 5013 K=1,IXIN
5013 X=RAN(X)
C NOW USES EXTENSION .DAT WHEN WRITING ON DSK (DEV. 1 ONLY!)
NW=1
NWX=0
TDUR=0
A=0
T2=1.
T4=1.
T5=0
J=1
IF(MX.NE.5)GO TO 1002
CKL IF(MX.NE.5)GO TO 40021
K=4
10023 N=AMOD(V(K),100.0)/-11.
C AMOD NEEDED BECAUSE CODE # MAY HAVE -100 FOR DF OR -200 FOR SUBR.
IF(N.EQ.2)GO TO 77
IF(N.EQ.3)GO TO 77
IF(N.NE.4)GO TO 10021
C TYPES OUT LIST OF ITEMS IN CODE NUMS -2n, -3n, -4n.
77 IF(V(K-2).LT.10000.)GO TO 10021
C FINDS A PARAM. NUM.
J=V(K+1)
KA=K+ABS(V(K-1))
C FOR UPDATE OF POINTER.
IF(J.EQ.1)GO TO 10024
177 N=V(K-2)
L=N/10000
M=N-L*10000
IF(V(KA-2).EQ.-10000.)J=J-1
C DON'T INCLUDE 'FINE' AS AN ITEM.
WRITE(JTYPE,10022)RINST(L),M,J
10024 K=KA
10021 K=K+1
IF(K.LT.I)GO TO 10023
10022 FORMAT(1XA4,' P',I2,' HAS ',I3,' ITEMS.')
1002 IF(IDALL.LT.0)GO TO 600
X=DUR(IDALL)
DO 2002 K=1,NINS
2002 IF(DUR(K).LT.0)DUR(K)=X
C ***** SORTER *************************
C ******* OUTPUT LOOP FROM HERE ON ********
600 IL=0
C********** BELOW IS FOR 'SECTIONS'
KODE=0
NWX=NWX+1
Y=BNW(NW)
723 IL=IL+1
3723 Z=V(IL)
IF(Z.EQ.-19899.)GO TO 732
IF(Z.NE.-9900.-Y)GO TO 723
C********** BELOW IS FOR 'SECTIONS'
2723 IL=IL+1
729 K=IL+2
MOT=V(IL+1)
RD=V(K)
IF(RD.EQ.-67.)GO TO 3726
RB=V(IL)
4150 LK=RB/10000.+.2
IF(LK.GE.98)GO TO 7700
LP=RB-LK*10000
C LK=INST # LP=PARAM #
LN=IPT(LK,LP)
IPT(LK,LP)=IL+2
IF(RD.EQ.-66.)GO TO 726
IF(IFIX(RD/-10.).EQ.5)GO TO 1726
C -59=MOVX, -55=MOV.
2727 ML=IPT(LK,LP)
IF(MOT.GT.0)GO TO 3727
C USE NEG WDCNT FOR 'ALL'
DO 4727 KL=LK+1,NINS
IF(NP(KL).GE.LP)GO TO 277
IF(LP.LT.NUMPX)NP(KL)=LP
277 IPT(KL,LP)=-(LK+(LP-1)*KZY)
NCNT(KL,LP)=10000
4727 IF(DUR(KL).LT.0)DUR(KL)=10000.
C ASSUMES THAT DURATIONS ARE SET IN 'NOTES'.
C AFTER 'ALL' IS USED ONCE IT WORKS LIKE DUPL OR REP.
GO TO 727
C 'MOVE' WITH 'ALL' KEEPS ORIGINAL BG TIME DATA REGARDLESS OF LATER BG TIMES.
3727 IF(LN.LE.0)GO TO 727
IF(V(IL).NE.V(LN-1))GO TO 727
DO 1727 L=1,NINS
DO 1727 KL=1,NP(L)
IF(LN.NE.IPT(L,KL))GO TO 1727
NCNT(L,KL)=10000
IPT(L,KL)=ML
C RESETS POINTERS FOR DUPL AND REP INSTS.
1727 CONTINUE
727 NCNT(LK,LP)=10000
2150 IF(MOT.LT.0)MOT=-MOT
IL=IL+MOT+1
3150 IF(V(IL).LT.0)GO TO 3723
GO TO 729
726 RB=V(IL+3)
K=RB/10000.
L=RB-K*10000
IPT(LK,LP)=-(K+(L-1)*KZY)
GO TO 2727
3726 LK=V(IL)
M=V(K+1)
KL=NP(M)
DO 4726 L=1,KL
IPT(LK,L)=IPT(M,L)
IF(IPT(M,L).NE.0)NCNT(LK,L)=10000
4726 CONTINUE
C NUMPX =31 (NUMP+1) NEXT DUPLS. RAN. RESTS.
IPT(LK,NUMPX)=IPT(M,NUMPX)
K=0
GO TO 2150
C BELOW FOR 'TEMPO' SETUP
7700 T2=V(IL+4)
T1=V(IL+3)
TBG=Y
TDUR=V(IL+2)
CALL SQYY(AC,T1,T2,TDUR)
8700 IF(TDUR.EQ.0)TDUR=10000.
T5=1.
T6=TBG+TDUR
IT3=1.
IF(LK.EQ.98)IT3=IL+2
T4=1.
GO TO 2150
C*************** ANY WDCNTS DOWN FROM HERE. *********
C NEXT ADJUSTS 'MOVE' TIMES IF BG IS AT A NOTE NUMBER.
1726 IF(V(IL-1).GT.-19000.)GO TO 2727
RA=BT
K=IL-1
2726 RZ=V(K)
V(K)=-9900.-RA
ISUB=-1
L=K+5
K=K+V(K+2)+2
IF(V(K).GT.-19000.)GO TO 2727
IF(V(K+1).NE.V(IL))GO TO 2727
IF(V(K).NE.RZ-V(L-1))GO TO 2727
RA=RA+V(L-1)
CALL BGSORT(RA)
GO TO 2726
C CONVERTS BG TIME OF NOTE NUM TO REAL TIME. DOESN'T WORK WITH -66!
C NOW WE BEGIN ON!! NOTE NUM. NOT AFTER NOTE NUM.
732 DO 2606 K=NW,NWZ
2606 BNW(K)=BNW(K+1)
NWZ=NWZ-1
IF(NWZ.EQ.0)GO TO 2111
IF(NWZZ.EQ.1)GO TO 5111
NWZZ=1
IF(NWZ.EQ.1)GO TO 1111
DO 3111 K=1,NWZ
IF(BNW(K).LT.1000.)GO TO 3111
X=BNW(NWZZ)
BNW(NWZZ)=BNW(K)
BNW(K)=X
NWZZ=NWZZ+1
3111 CONTINUE
5111 IF(NWZZ.EQ.NWZ)GO TO 1111
L=NWZZ+1
X=BNW(NWZZ)
DO 4111 K=L,NWZ
IF(BNW(K).GT.X)GO TO 4111
RA=BNW(K)
BNW(K)=X
X=RA
4111 CONTINUE
BNW(NWZZ)=X
GO TO 1111
111 FORMAT(1XA4,'.DAT',12X,'EDIT FILE NAME=',A4,8X,
1'STORAGE=',I5,'/',I5,/' TEMPO FACTOR=',F6.2/)
1023 FORMAT(/' < ',A4,'.DAT -- RANDOM NUMBER=',I6/1X2A4)
902 FORMAT(1XA4/)
2111 NWZ=-1
C ABOVE ORDERS BNW DATA TO SAVE TIME AT 1108 ON PG5.
1111 IF(MZ.EQ.0)GO TO 2601
IF(NWX.EQ.1)WRITE(JOUT,111)FNAME,FLNM,I,LIMIT,TF
K=NWX-1
IF(NWX.LE.1)GO TO 377
IF(IT(J).NE.-3)WRITE(JOUT,3154),K,Y
377 IF(IT(J).EQ.-3)WRITE(JOUT,5154),K,IBX,RINST(J)
2601 DO 602 K=1,NINS
48 RIN=RINST(K)
IF(NCNT(K,NUMPX).EQ.10000)GO TO 477
IF(NWX.GT.1)GO TO 602
477 NCNT(K,NUMPX)=1
IJ=IPT(K,NUMPX)
X=0
IF(IJ.NE.0)X=ALL(JPT,IPT(K,NUMPX))
C CHECK FOR "ALL" WITH RAND. DEV.
WRITE(JOUT,5396)K,RIN,X
X=DUR(K)
IF(X.GT.10000.)GO TO 83
WRITE(JOUT,8396),X
GO TO 602
5396 FORMAT(I3,') 'A4,' RANDOM TF =',F4.2,7X,'DURATION =',$)
7396 FORMAT('+',F5.0,' NOTES')
8396 FORMAT('+',F7.2,'"')
83 X=X-10000.
WRITE(JOUT,7396),X
602 CONTINUE
IF(MZ.EQ.0)GO TO 1601
715 IF(IT3.NE.1.)GO TO 1602
RA=T1*60.
RB=T2*60.
WRITE(JOUT,6154),RA,RB,TDUR
IT3=0
1602 IF(NWX.EQ.1)GO TO 315
IF(IT(J).EQ.-3)GO TO 1108
IT(J)=IT(J)/10
1108 NRN=-1
C NRN IS FLAG FOR NEXT SUBROUTINE
GO TO 500
6154 FORMAT(' TMP=',F7.3,' TO',F8.3,
1' DURING',F6.2,' SECS. BASIC TIME.'/)
5154 FORMAT(/' << CHANGE',I3,' BEGINS ON NOTE',I4,1XA4,' >>'/)
3154 FORMAT(/' << BASIC TIME OF CHANGE',I3,' IS',F8.3,'" >>'/)
4154 FORMAT(' THE FIRST',F9.4,'" ARE OMITTED'/)
315 IF(OP1.NE.0)WRITE(JOUT,4154),OP1
1601 IF(NWX.GT.1) GO TO 1108
IF(TF.GT.10.)TF=TF/60.
TF=RNDOFF/TF
C RNDOFF IS ROUND OFF NUMBER. (100 OR 1000)
CROFF 100 HERE FOR NEW DAC!?#@&βX 1/76 TF=1000./TF
DO 6015 K=3,NUMP
COPYL(K)=-9900
6015 COPY(K)=-9900.
C INITS PARAM REPRESSION FEATURE.
9926 DO 5015 K=1,NINS
IQ(K)=BG(K)*1000.
BG(K)=0
RNP(K)=0
P1(K)=0
IF(DUR(K).LE.10000.)DUR(K)=DUR(K)-.0001
C******* FEB. 16,71 FOR ROUND-OFF NONSENSE
5015 KNT(K)=0
IF(MZ.LT.0)WRITE(JOUT,1023),FNAME,IXIN,PLAY,ISEMI
IF(MX.LT.0)WRITE(ID20,1023)FNAME,IXIN,PLAY,ISEMI
BW=0
CCC GO TO 500
NRN=0
500 CALL RUN2(NRN)
GO TO 600
END